@Library('jenkins-shared-lib') _   // 使用最新版本，不加 @tag

// 在pipeline外定义变量
def flag="GlobalFlag"

import org.example.Utils

pipeline {
    agent any
    // 设置全局选项
    options {
        // 构建超时时间设置为 1 小时
        timeout(time: 1, unit: 'HOURS')
        // 保持最近 10 次构建记录
        buildDiscarder(logRotator(numToKeepStr: '10'))
        // 禁用并发构建
        disableConcurrentBuilds()
    }
    // environment {
    //     APP_NAME = "my-service"
    //     DEPLOY_ENV = "dev"
    // }
    stages {
        stage("Clean workspace"){
            steps {
                // 需要安装Workspace Cleanup Plugin
                cleanWs()
                echo DEPLOY_ENV
                echo APP_NAME
            }
        }
        stage('Read resources file') {
            steps {
                script {
                    // 读取普通文件(groovy可以对yaml等格式化文件进行解析)
                    def str = libraryResource 'other/string.txt'
                    println(str)
                    writeFile(file: 'string.txt', text: str)

                    // 渲染模板文件
                    def values = [
                        appName : "myapp",
                        image   : "registry.example.com/myapp",
                        tag     : "1.0.0",
                        port    : 8080,
                        env     : "prod"
                    ]
                    def content = renderTemplate('templates/docker-compose.yml', values)
                    echo "----- docker-compose.yml -----\n${content}"
                    writeFile(file: 'docker-compose.yml', text: content)
                    def readCon = readFile('docker-compose.yml')
                    echo "-----read docker-compose.yml -----\n${readCon}"
                }
            }
        }
        stage('Init') {
            steps {
                // 引用在pipeline外定义的变量
                echo "echo: Flag is ${flag}"
                script {
                    println("Direct Print flag: ")
                    println(flag)
                    println "println: Flag is ${flag}"
                }
            }
        }
        
        stage('Build') {
            steps {
                // 调用自定义库中的 buildApp 方法
                buildApp(appName: env.APP_NAME, env: env.DEPLOY_ENV)
                
                sayHello("jenkins")
            }
        }

        stage('Info') {
            steps {
                // 直接使用自定义库中的方法需要在script块中
                script {
                    // 使用工具类
                    def str = Utils.echo(this)
                    echo "✅ Build finished for ${env.APP_NAME}, commit ${str}"
                }
            }
        }
    }

    post {
        always {
            echo "流水线执行完毕"
        }
        success {
            echo "🎉 部署成功"
        }
        failure {
            echo "❌ 部署失败"
        }
    }
}